﻿package com.videointeractive.tool
{
	import flash.net.URLRequest;
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.display.LoaderInfo;
	import flash.display.DisplayObjectContainer;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.events.IOErrorEvent;
	
	import com.videointeractive.tool.notification.GraphicEvent;
	
	import com.videointeractive.vo.ElementGraphicVO;
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////
	// GraphicLoader ::
	// - conteneur graphique d'un élément de la graphic
	/////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	public class GraphicLoader extends Sprite
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// MEMBRES DE CLASSE
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// propriété qui stocke tous les attributs de l'élément de graphic
		private var _graphicProperties	: ElementGraphicVO;
		
		// conteneur du loader
		private var graphicContainer	: Sprite;
		// loader de l'élément
		private var graphicLoader 		: Loader;
		// LoaderInfo utiliser pour extraire les données du loader
		private var sli				: LoaderInfo;
		
		// propriétés utiles au suivi du chargement de l'élément
		private var _initialized	: Boolean = false;
		private var _loaded			: Boolean = false;
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// CONSTRUCTEUR
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		function GraphicLoader ( graphicProps : ElementGraphicVO )
		{
			if ( loaded ) loaded = false;
			graphicProperties = graphicProps;
			initialized = true;
			init( graphicProperties );			
		}
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// METHODES PUBLIQUES : INITIALISATION DU CHARGEMENT
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		public function init( sProp : ElementGraphicVO )
		{
			var requete:URLRequest = new URLRequest();
			// on set les properties de la graphic à charger
			requete.url 	= sProp.graphicSourceURL;
			trace( "A charger :::::: " + sProp.graphicSourceURL );
				
			// on charge la graphic
			graphicLoader = new Loader( );
			graphicLoader.load( requete );
			sli = graphicLoader.contentLoaderInfo;
			sli.addEventListener ( Event.INIT, initLoading );
			sli.addEventListener ( Event.OPEN, beginLoading );
			sli.addEventListener ( ProgressEvent.PROGRESS, loading );
			sli.addEventListener ( Event.COMPLETE, loadingComplete );
			sli.addEventListener ( IOErrorEvent.IO_ERROR, loadingFailed );
		}
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// METHODES PRIVEES : GESTIONNAIRES DE CHARGEMENT
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		private function beginLoading ( pEvt : Event ):void
		{
		}
		
		private function loading ( pEvt : ProgressEvent ):void
		{
		}
		
		private function loadingComplete ( pEvt : Event ):void
		{
			initialized = false;
			loaded = true;
			
			trace("loaded");
			
			pEvt.target.content.width 	= graphicProperties.graphicWidth;
			pEvt.target.content.height 	= graphicProperties.graphicHeight;
			pEvt.target.content.x 		= graphicProperties.graphicX;
			pEvt.target.content.y 		= graphicProperties.graphicY;
						
			addChild( pEvt.target.content );
			
			dispatchEvent ( new GraphicEvent ( GraphicEvent.ELEMENT_COMPLETE, true, false, pEvt ) );
		}
		
		private function initLoading ( pEvt : Event ):void
		{
			trace ("initialisation du chargement");
		}
		
		private function loadingFailed ( pEvt : IOErrorEvent ):void
		{
			trace ("erreur de chargement GraphicLoader : " + pEvt.text + "\n");
		}
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// GETTER & SETTER
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		public function get graphicProperties ( ) : ElementGraphicVO
		{
			return _graphicProperties;
		}
		
		public function set graphicProperties ( val : ElementGraphicVO) : void
		{
			_graphicProperties = val;
		}
		
		public function get initialized ( ) : Boolean
		{
			return _initialized;
		}
		
		public function set initialized ( pBoo : Boolean ) : void
		{
			_initialized = pBoo;
		}
		
		public function get loaded ( ) : Boolean
		{
			return _loaded;
		}
		
		public function set loaded ( pBoo : Boolean ) : void
		{
			_loaded = pBoo;
		}
	}
}